const User = require('../models/User');
const bcrypt = require('bcryptjs');

// 获取用户列表（分页）
exports.getUsers = async (req, res) => {
  try {
    // 获取分页参数，默认为第1页，每页10条
    const page = parseInt(req.body.page) || 1;
    const pageSize = parseInt(req.body.pageSize) || 10;
    const skip = (page - 1) * pageSize;

    // 获取查询参数
    const { username, status, role } = req.body;

    // 构建查询条件
    const query = {};
    
    // 状态查询（如果提供了status参数且不为空字符串，则使用该参数）
    if (status !== undefined && status !== '') {
      const statusNum = parseInt(status);
      if (!isNaN(statusNum)) {
        query.status = statusNum;
      }
    }

    // 用户名查询
    if (username) {
      query.username = { $regex: username, $options: 'i' }; // 不区分大小写模糊查询
    }

    // 角色查询
    if (role) {
      query.role = role;
    }

    // 查询用户总数（基于查询条件）
    const total = await User.countDocuments(query);
    
    // 查询分页数据
    const users = await User.find(query)
      .select('-password')
      .skip(skip)
      .limit(pageSize);

    res.json({
      errCode: 0,
      errMsg: 'success',
      list: users,
      page: {
        pageSize,
        page,
        total
      }
    });
  } catch (error) {
    console.error(error);
    res.status(500).json({ errCode: 500, errMsg: '服务器错误' });
  }
};

// 创建新用户
exports.createUser = async (req, res) => {
  const { username, account, password, email, phone, role, avatar, status } = req.body;

  try {
    // 检查账号是否已存在
    let user = await User.findOne({ account });
    if (user) {
      return res.status(200).json({ errCode: 1000, errMsg: '该账号已存在' });
    }

    // 检查邮箱是否已存在
    user = await User.findOne({ email });
    if (user) {
      return res.status(200).json({ errCode: 1001, errMsg: '该邮箱已被使用' });
    }

    // 检查手机号是否已存在
    user = await User.findOne({ phone });
    if (user) {
      return res.status(200).json({ errCode: 1002, errMsg: '该手机号已被使用' });
    }

    // 创建新用户
    user = new User({
      username,
      account,
      password,
      email,
      phone,
      role: role || 'user',
      avatar: avatar || 'default-avatar.png',
      status: status || 1,
      createdAt: Date.now(),
      updatedAt: Date.now()
    });

    await user.save();

    // 返回不包含密码的用户信息
    const userResponse = user.toObject();
    delete userResponse.password;

    res.status(200).json({
      errCode: 0,
      errMsg: 'success',
      data: userResponse
    });
  } catch (error) {
    console.error(error);
    res.status(500).json({ errCode: 500, errMsg: '服务器错误' });
  }
};
// 重置密码
exports.restPwd = async (req, res) => {
  const { id, password } = req.body;
  try {
    let user = await User.findById(id);
    if (!user) {
      return res.status(200).json({ errCode: 1003, errMsg: '用户不存在' });
    }
    // 直接设置密码，由User模型的pre('save')中间件自动加密
    user.password = password;
    user.updatedAt = Date.now();
    await user.save();
    res.json({
      errCode: 0,
      errMsg: 'success',
      data: { message: '密码重置成功' }
    });
  } catch (error) {
    console.error(error);
    res.status(500).json({ errCode: 500, errMsg: '服务器错误' });
  }
}
// 更新用户信息
exports.updateUser = async (req, res) => {
  const { id, username, email, phone, role, avatar, password, status } = req.body;

  try {
    let user = await User.findById(id);
    
    if (!user) {
      return res.status(200).json({ errCode: 1003, errMsg: '用户不存在' });
    }

    // 如果更新密码
    if (password) {
      user.password = password;
    }

    // 更新其他字段
    user.username = username || user.username;
    user.email = email || user.email;
    user.phone = phone || user.phone;
    user.role = role || user.role;
    user.avatar = avatar || user.avatar;
    user.status = status || user.status;
    user.updatedAt = Date.now();

    await user.save();

    // 返回不包含密码的用户信息
    const userResponse = user.toObject();
    delete userResponse.password;

    res.json({
      errCode: 0,
      errMsg: 'success',
      data: userResponse
    });
  } catch (error) {
    console.error(error);
    res.status(500).json({ errCode: 500, errMsg: '服务器错误' });
  }
};

// 删除用户
exports.deleteUser = async (req, res) => {
  try {
    const { id } = req.body;
    // const user = await User.findById(req.params.id);
    const user = await User.findById(id);
    
    if (!user) {
      return res.status(200).json({ errCode: 1003, errMsg: '用户不存在' });
    }

    await user.deleteOne();
    
    res.json({
      errCode: 0,
      errMsg: 'success',
      data: { message: '用户删除成功' }
    });
  } catch (error) {
    console.error(error);
    res.status(500).json({ errCode: 500, errMsg: '服务器错误' });
  }
};